//翻转单词，难点是在寻找一个单词的开始和结尾的情况，没有删除多余的空格
import java.util.Arrays;
import  java.util.Scanner;

public class reverseWord {
    public void reverse(char[] st,int start,int end){//翻转字符串，k
        int k = (end - start+1)/2;
        while (k>0){
            char temp = st[start];
            st[start] = st[end];
            st[end] = temp;
            k--;
            start++;
            end--;
        }
    }

    public void reverse(char[] s){
//        var main =new reverseWord();
        reverse(s,0, s.length-1);
//        System.out.println(Arrays.toString(s));
        //使用双指针，对每一个单词进行翻转
        int slow = 0;
        int fast = 0;

        for (;fast<s.length;){//翻转每个单词
            System.out.println(fast);
            if(s[fast]!=' '){
                if(fast+1==s.length  || s[fast+1]==' '){//如果后面当前不是空格，下一个是空格，或者是是最后一个字母了
                    reverse(s,slow,fast);
                    fast++;
                }else{
                    fast++;//说明当前还不是最后一个字符
                }
                continue;
            }
            if(s[fast]==' '){//如果当前的字符是空格
                if(s[fast+1]==' '){//后面还是空格，就继续移动
                    fast++;
                }else if(s[fast+1]!=' '){//下一个不是空格了，就快到一个新的单词了
                    fast++;
                    slow = fast;
                }
            }
        }
        String res = new String(s);
        System.out.println(res);
    }
    public static void main(String[] args) {
        String s =" hello    world! zs mn ";
        s = s.trim();//祛除空格;
//        System.out.println(s);
        var main = new reverseWord();
        main.reverse(s.toCharArray());
    }
}

